package com.ikas.ai.framework.node;

import com.ikas.ai.framework.core.listener.NodeListener;
import com.ikas.ai.framework.flow.ScoreFlow;

/**
 * @Description: 算法节点
 * @Author: qi.yilai
 * @Date: 2023/1/12 16:26
 * @Version: 1.0.0
 **/
public interface Node<I, O> {

    /**
     * 输入参数
     *
     * @param i
     */
    void input(I i);

    /**
     * 获取所有的输出参数
     *
     * @return
     */
    I outVariables();

    /**
     * 输出结果
     *
     * @return
     */
    O result();

    /**
     * 执行算法逻辑
     *
     * @return
     */
    boolean execute();

    /**
     * 上一个节点入参
     *
     * @return
     */
    I previous();

    /**
     * 开始执行时间
     *
     * @return
     */
    long startTime();

    /**
     * 结束时间
     *
     * @return
     */
    long endTime();

    /**
     * 所属流程
     *
     * @return
     */
    ScoreFlow getOwner();

    /**
     * 节点状态
     *
     * @return
     */
    NodeStatus status();

    /**
     * 节点名称
     *
     * @return
     */
    String name();

    /**
     * 节点id
     *
     * @return
     */
    Long nodeId();

    /**
     * 节点实例id
     *
     * @return
     */
    Long nodeInstanceId();

    /**
     * 节点类型
     *
     * @return
     */
    NodeType type();

    /**
     * 异常
     *
     * @return
     */
    String exception();

    /**
     * 告警信息
     *
     * @return
     */
    String warningMessage();

    /**
     * 添加节点listener
     * @param nodeListener
     */
    void addListener(NodeListener nodeListener);
}
